\subsection{Software engineering design}
To model our system we used UML diagrams for the software engineering side of the project. The following are the designs we have used to build our system, along with a brief description of each one.
    
\begin{figure}[H]
\begin{center}
\includegraphics{resources/recommender.pdf}
\caption{\textbf{Recommender Classes:} We have three different types of recommenders thus 3 classes are representing them. All of them inherit common methods from the parent \texttt{Recommender} class.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics{resources/dbpedia.pdf}
\caption{\textbf{DBpedia Framework Classes:} The classes that gather and store information from DBpedia. We chose to implement a multithreaded solution to speed up the process. The \texttt{DBpediaCollection} class represents a thread-safe collection where all the \texttt{DBpediaWorker}s write in.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics{resources/facebook.pdf}
\caption{\textbf{Facebook Framework Classes:} Out \texttt{FacebookAPI} class represents a wrapper class around the \texttt{TinyFBClient} class, a Facebook Java API which was written by Carmen Delessio and maintained at \href{www.socialjava.com}{www.socialjava.com}.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics{resources/youtube.pdf}
\caption{\textbf{YouTube Framework Classes:} The classes the query and gather video recommendations. They follow the same model as with gathering information from DBpedia, using a thread-safe collection and worker threads.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics{resources/core.pdf}
\caption{\textbf{User Class:} The \texttt{User} class with its associated collections. }
\end{center}
\end{figure}

